package br.jus.tjpe.dao;

import java.io.Serializable;
import java.util.List;
import javax.persistence.PersistenceException;
import br.jus.tjpe.dominio.EntidadeBase;

public interface DaoGenerico<T extends EntidadeBase> {

	/**
	 * @param entidade
	 * @return
	 * @throws PersistenceException
	 */
	public abstract <E> E inserir(E entidade) throws PersistenceException;

	/**
	 * @param entidade
	 * @return
	 * @throws PersistenceException
	 */
	public abstract <E> E editar(E entidade) throws PersistenceException;

	/**
	 * @param entidade
	 * @return
	 * @throws PersistenceException
	 */
	public abstract <E> E remover(E entidade) throws PersistenceException;

	/**
	 * @param clazz
	 * @param id
	 * @return
	 * @throws PersistenceException
	 */
	public abstract <E> E buscarPorId(Class<E> clazz, Serializable id) throws PersistenceException;

	/**
	 * @param clazz
	 * @return
	 * @throws PersistenceException
	 */
	public abstract List<T> buscarTodos() throws PersistenceException;

}